<?php

namespace App\Http\Controllers\admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\LoginRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\DB;

use Mail;

class LoginController extends Controller
{

    public function article(){

        //取值
        $redis = Redis::get('article');
        var_dump($redis);die();
        //存值
        $data = DB::select("SELECT * FROM `article`");
        $data = json_encode($data);
        Redis::set("article",$data);
        var_dump($data);die();
    }


    public function login(LoginRequest $loginRequest)
    {
        // 表单传送过来的值
        $mobile = $loginRequest->input('mobile');

        $password = $loginRequest->input('password');

        $code_key = 'code_'.substr($mobile,-4);//每个手机号、产一个key
        $error_key = 'error';//错误次数
        $verifies = $loginRequest->input('verifies');//表单接值
        //获取redis里面的缓存验证码
        $cache_code = Redis::get($code_key);//缓存里面获取到的值
        if($verifies == $cache_code) {
            //验证码正确
            $adminInfo = [];//查库
            if($adminInfo['password'] == $password) {
                // 密码正确的 登录成功
                // 把用户信息保存到缓存里面
                Redis::hMSet("adminInfo",$adminInfo);
            } else {
//                密码不正确
//                加一层限制 错误不能超过三次  Redis
                Redis::incr($error_key);
//                Redis::incrBy($error_key,1);

                // 验证码不争情
                return back()->withErrors("验证码不正确");
            }

        } else {
            // 验证码不争情
            return back()->withErrors("验证码不正确");
        }
    }


    //
    public function doLogin(LoginRequest $loginRequest){
        // 表单传送过来的值
        $mobile = $loginRequest->input('mobile');
        $verifies = $loginRequest->input('verifies');
        $password = $loginRequest->input('password');
        /**
         * redis
         * 类型    应用
         * string  字符串 计数器 、自增自减 、验证码、redis集群session会话控制
         * list    对垒  消息队列、
         * hash    哈希   用户信息、文章信息
         * set     集合  粉丝、文章点赞
         * zset  有序集合  文章排序
         */
        // 验证码
        $code_key = 'code_'.substr($mobile,-4);//每个手机号、产一个key
        //redis 获取值
        $redis_code = Redis::get($code_key);
        $error_key = 'password_error'.substr($mobile,-4);// 记录用户密码错误一个次数
        // 判断密码错误次数是否超过3次、如果超过 返回提示
        $error_times = Redis::get($error_key);
        if ($error_times > 3) {
            return back()->withErrors("密码错误超过3次、请联系管理员");
        }
        // 判断验证码是否
        if ($verifies == $redis_code) {
            // 查数据库  模型查库 -可以toArray DB查库不可以用
            // 如果缓存缓存存在
            $admin_id = Redis::get('admin_id');
            if ($admin_id) {
                // 记录用户信息
                $adminInfo = Redis::hMGet("adminInfo".$admin_id);
                return view("admin/index",['adminInfo' => $adminInfo]);
            }
            $adminInfo = DB::table('admin')->where('mobile',$mobile)->first();//查库
            $data = json_decode(json_encode($adminInfo),true);
            // 判断是否管理员是否
            if($adminInfo){
                //判断密码
                if ($adminInfo->password == $password) {
                    // 存储七天面登录 7 * 86400
                    Redis::setex('admin_id' , 7 * 86400 , $adminInfo['id']);  //存储key为library,值为phpredis的记录，有效时长为10秒
                    // 密码正确
                    // 对象转化数组
                    // 记录用户信息
                    Redis::hMSet("adminInfo".$adminInfo['id'],$data);
                    return view("admin/index",['adminInfo' => $adminInfo]);
                }  else {
                    // 密码不正确、密码错误次数
                    Redis::incrby($error_key,1);//递增
                    return back()->withErrors("密码错误");
                }
            } else {
                return back()->withErrors("用户不存在");// 不存在用户密码不正确
            }
        } else {
            // 验证码不正确
            return back()->withErrors("验证码错误");
        }


    }

    /**
     * 发送验证码
     */
    public function sendCode(Request $request){
        // new Redis()
        // 接值
        $mobile = $request->get('mobile');
        $code_key = 'code_'.substr($mobile,-4);//每个手机号、产一个key
        // set(建明，值)
        $code_value = rand(1000,9999);
//        Redis::set($code_key,$code_value);
        Redis::setex($code_key , 300 , $code_value);

        // 验证码发送到邮箱
        // 第一步 登录QQ邮箱、开启pop3服务
        // 第二步 修改配置信息、用户名、授权码信息 25
        // 第三步 使用 use Mail
        // Mail::raw() 发送纯文本
        // Mail::send() 可以调用模版、发送邮件
        // 发送文本
//        Mail::raw('验证码是：'.$code_value,function ($message){
//            $message->to('1043373451@qq.com')->subject('验证码');
//        });
//        // 调用模版发送给邮件
//        Mail::send('admin.email_template',['code_value' => $code_value],function ($message){
//            $message->to('1429203974@qq.com')->subject('验证码');
//        });


        return json_encode([
            'code' => 200,
            'msg' => '发送成功'
        ]);
    }
}
